package pt.iscte.dcti.es.rhplus.servico;

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Hashtable;

import pt.iscte.dcti.es.rhplus.sistema.persistencia.AcessoBD;

/**
 * 
 * @author Gustavo Cabral
 * @author Helena Monteiro
 * @author Joao Catarino
 * @author Tiago Moreiras
 */
public class Factura {

	public Factura(final int id_factura, final int id_pagamento, Date data) {
		this.id_factura = id_factura;
		this.id_pagamento = id_pagamento;
		this.data = data;
	}

	public int getIdFactura() {
		return id_factura;
	}

	public int getIdPagamento() {
		return id_pagamento;
	}

	public Date getData() {
		return data;
	}

	public static Factura devolve(final int id_factura) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_factura");
		Hashtable<String, Object> dados_da_factura = new Hashtable<String, Object>();
		dados_da_factura.put("var_id_factura", id_factura);
		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_factura);

		if (result_set.next()) {

			int id_pagamento = result_set.getInt("id_pagamento");
			Date data = result_set.getDate("data");

			acesso_bd.fechaLigacao();

			Factura factura = new Factura(id_factura, id_pagamento, data);

			return factura;
		} else
			return null;
	}

	public static Factura devolveDePagamento(final int id_pagamento) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_factura_de_pagamento");
		Hashtable<String, Object> dados_da_factura = new Hashtable<String, Object>();
		dados_da_factura.put("var_id_pagamento", id_pagamento);
		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_factura);

		if (result_set.next()) {

			int id_factura = result_set.getInt("id_factura");
			Date data = result_set.getDate("data");

			acesso_bd.fechaLigacao();

			Factura factura = new Factura(id_factura, id_pagamento, data);

			return factura;

		} else
			return null;
	}

	public static void insere(final Date data, final int id_pagamento) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("inserir_factura");
		Hashtable<String, Object> dados_da_factura = new Hashtable<String, Object>();
		dados_da_factura.put("var_data", data);
		dados_da_factura.put("var_id_pagamento", id_pagamento);
		acesso_bd.executaUpdate(qryName, dados_da_factura);
		acesso_bd.fechaLigacao();
	}

	// Atributos
	private int id_factura, id_pagamento;
	private Date data;

}
